/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.Respuesta360;
import co.com.sed.model.beans.Eval360Indi;
import co.com.sed.model.beans.Pregunta360;
import co.com.sed.model.beans.Calificacion;
import co.com.sed.model.util.Util;

/**
 * @author derain gamez brito
 *
 */
public class Respuesta360Peer {
	
	
	private static final String BUSCAR_RESPUESTAS360 =
			"SELECT id_respuesta_360, id_pregunta_360, id_eval_360_indiv, id_calificacion "+
			"FROM respuesta_360 ";
	
	private static final String BUSCAR_RESPUESTA360 =
			"SELECT id_respuesta_360, id_pregunta_360, id_eval_360_indiv, id_calificacion "+
			"FROM respuesta_360 "+
			"WHERE id_respuesta_360 = &id_respuesta_360";

	private static final String BUSCAR_RESPUESTA360_POR_PREGUNTA360 =
		"SELECT id_respuesta_360, id_pregunta_360, id_eval_360_indiv, id_calificacion "+
		"FROM respuesta_360 "+
		"WHERE id_pregunta_360 = &id_pregunta_360";

	private static final String BUSCAR_RESPUESTA360_POR_EVAL_360_INDIV =
		"SELECT id_respuesta_360, id_pregunta_360, id_eval_360_indiv, id_calificacion "+
		"FROM respuesta_360 "+
		"WHERE id_eval_360_indiv = &id_eval_360_indiv";

	private static final String BUSCAR_RESPUESTA360_POR_CALIFICACION =
		"SELECT id_respuesta_360, id_pregunta_360, id_eval_360_indiv, id_calificacion "+
		"FROM respuesta_360 "+
		"WHERE id_calificacion = &id_calificacion";

	
	private static final String INSERTAR_RESPUESTA360 =
			"INSERT INTO respuesta_360(id_eval_360_indiv, id_calificacion) VALUES "+
			"('&id_pregunta_360','&id_eval_360_indiv',&id_calificacion)";

	private static final String ACTUALIZAR_RESPUESTA360 =
			"UPDATE pregunta_360 "+
			"SET fecha_asig = '&fecha_asig', estado = '&estado', evaluado = &evaluado,periodo_evaluado=&periodo_evaluado"+ 
			"WHERE id_pregunta_360 = &id_pregunta_360";

	private static final String ELIMINAR_RESPUESTA360 =
			"DELETE FROM pregunta_360 "+
			"WHERE id_pregunta_360 = &id_pregunta_360";

	/** busca en la base de datos todos los registros de la tabla "pregunta360"
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	 * 
	 * @return					lista de cargos
	 * @see         				Cargo, Statement
	 */
	public static ArrayList<Respuesta360> buscarRespuestas360(Statement stmt) {
		ArrayList<Respuesta360> Respuestas360 = new ArrayList<Respuesta360>();
		
		String sql = BUSCAR_RESPUESTAS360;
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Respuesta360 res = new Respuesta360();
					
					res.setIdRespuesta360(rs.getInt("id_respuesta_360"));
					res.setIdPregunta360(new Pregunta360 (rs.getInt("id_pregunta_360")));
					res.setIdEval360Indiv(new Eval360Indi (rs.getInt("id_eval_360_indiv")));
					res.setIdCalificacion(new Calificacion (rs.getInt("id_calificacion")));
								
					Respuestas360.add(res);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}
		
		return Respuestas360;
	}


	/** busca en la base de datos un registro de la tabla "pregunta360"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param pregunta360				id de la pregunta360 que se desea cosultar
	* 
	* @return					pregunta360 buscado
	* @see         				Pregunta360, Statement
	*/
	public static Respuesta360 buscarRespuesta360(Statement stmt, int idRespuesta360) {
		Respuesta360 res = new Respuesta360();
		
		String sql = BUSCAR_RESPUESTA360;
		
		// se setean los "parametros" &id_pregunta_360, '&pregunta', &id_t_evaluacion
		sql = sql.replaceAll("&id_pregunta_360", String.valueOf (idRespuesta360));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					res.setIdRespuesta360(rs.getInt("id_respuesta_360"));
					res.setIdPregunta360(new Pregunta360 (rs.getInt("id_pregunta_360")));
					res.setIdEval360Indiv(new Eval360Indi (rs.getInt("id_eval_360_indiv")));
					res.setIdCalificacion(new Calificacion (rs.getInt("id_calificacion")));
							
					
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}
		
		return res;
	}
	
	/** busca en la base de datos todos los registros de la tabla "Pregunta360" que pertenescan a un TIPOEVALUACION
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de Pregunta360
	* @see         				Pregunta360, Statement
	*/
	public static ArrayList<Respuesta360> buscarRespuesta360PorPregunta360(Statement stmt, int idPregunta360) {
		ArrayList<Respuesta360> Respuestas360 = new ArrayList<Respuesta360>();

		String sql = BUSCAR_RESPUESTA360_POR_PREGUNTA360;

		// se setean los "parametros"
		sql = sql.replaceAll("&id_respuesta_360", "" + idPregunta360);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Respuesta360 res = new Respuesta360();
					
					res.setIdRespuesta360(rs.getInt("id_respuesta_360"));
					res.setIdPregunta360(new Pregunta360 (rs.getInt("id_pregunta_360")));
					res.setIdEval360Indiv(new Eval360Indi (rs.getInt("id_eval_360_indiv")));
					res.setIdCalificacion(new Calificacion (rs.getInt("id_calificacion")));
											
					Respuestas360.add(res);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return Respuestas360;
	}

	
	
	public static ArrayList<Respuesta360> buscarRespuesta360PorEval360Indiv(Statement stmt, int idEval360Indiv) {
		ArrayList<Respuesta360> Respuestas360 = new ArrayList<Respuesta360>();

		String sql = BUSCAR_RESPUESTA360_POR_EVAL_360_INDIV;

		// se setean los "parametros"
		sql = sql.replaceAll("&id_eval_360_indiv", "" + idEval360Indiv);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Respuesta360 res = new Respuesta360();
					
					res.setIdRespuesta360(rs.getInt("id_respuesta_360"));
					res.setIdPregunta360(new Pregunta360 (rs.getInt("id_pregunta_360")));
					res.setIdEval360Indiv(new Eval360Indi (rs.getInt("id_eval_360_indiv")));
					res.setIdCalificacion(new Calificacion (rs.getInt("id_calificacion")));
											
					Respuestas360.add(res);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return Respuestas360;
	}

	public static ArrayList<Respuesta360> buscarRespuesta360PorCalificacion(Statement stmt, int idCalificacion) {
		ArrayList<Respuesta360> Respuestas360 = new ArrayList<Respuesta360>();

		String sql = BUSCAR_RESPUESTA360_POR_CALIFICACION;

		// se setean los "parametros"
		sql = sql.replaceAll("&id_calificacion", "" + idCalificacion);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					Respuesta360 res = new Respuesta360();
					
					res.setIdRespuesta360(rs.getInt("id_respuesta_360"));
					res.setIdPregunta360(new Pregunta360 (rs.getInt("id_pregunta_360")));
					res.setIdEval360Indiv(new Eval360Indi (rs.getInt("id_eval_360_indiv")));
					res.setIdCalificacion(new Calificacion (rs.getInt("id_calificacion")));
											
					Respuestas360.add(res);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return Respuestas360;
	}

	
	
	/** Inserta un Tipo de pregunta360 en la base de datos
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	* @param pregunta360		pregunta360 que se va a insertar en la base de datos
	* 
	* @return					void
	* @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	* 
	* @see         			DataManager
	*/
	public static int insertarRespuesta360(Statement stmt, Respuesta360 respuesta360) throws SQLException {
		int idNuevoRespuesta360 = -1;
		ResultSet rs = null;
		
		
		try {
		String sql = INSERTAR_RESPUESTA360;
		// se setean los "parametros": &id_cargo, '&cargo', '&fecha_ini', '&fecha_egr', &id_nivel, &id_dependencia, &funcionario

		sql = sql.replaceAll("&id_pregunta_360", ""+respuesta360.getIdPregunta360().getIdPregunta360())
				 .replaceAll("&id_eval_360_indiv", ""+respuesta360.getIdEval360Indiv().getIdEval360Indi())		
				 .replaceAll("&id_calificacion", ""+respuesta360.getIdCalificacion().getIdCalificacion());
				 
								
		stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
		
		rs = stmt.getGeneratedKeys();
		if (rs.next()) {
			idNuevoRespuesta360 = rs.getInt("id_respuesta_360");
			Util.print("nuevo registro: " + idNuevoRespuesta360);
		}
	} finally {
		rs.close();
	}

	return idNuevoRespuesta360;
	}
	
	/** Actualiza un pregunta360 en la base de datos
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	* @param pregunta360		evaluacion360 que se va a actualizar en la base de datos
	* 
	* @return					void
	* @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	* 
	* @see         			DataManager
	*/
	public static void actualizarPregunta360(Statement stmt, Respuesta360 respuesta360) throws SQLException {
		String sql = ACTUALIZAR_RESPUESTA360;
		// se setean los "parametros": &id_evaluacion_360, &fecha_asig, &estado, &identificacion, &periodo_evaluado
		sql = sql.replaceAll("&id_pregunta_360", ""+ respuesta360.getIdPregunta360().getIdPregunta360())
		 		.replaceAll("&id_eval_360_indiv", ""+ respuesta360.getIdEval360Indiv().getIdEval360Indi())	
		 		.replaceAll("&id_calificacion", ""+ respuesta360.getIdCalificacion().getIdCalificacion());
	
		stmt.executeUpdate(sql);
	}
	
	/** Elimina un Cargo en la base de datos
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	* @param Pregunta360		Pregunta360 que se va a eliminar en la base de datos
	* 
	* @return					void
	* @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	* 
	* @see         			DataManager
	*/
	public static void eliminarPregunta360(Statement stmt, Respuesta360 respuesta360) throws SQLException {
	String sql = ELIMINAR_RESPUESTA360;
	// se setean los "parametros": &id_evaluacion_360
	sql = sql.replaceAll("&id_respuesta_360", "" + respuesta360.getIdRespuesta360());
	
	stmt.executeUpdate(sql);
	}

}
